# 220205 1045

# 切片和索引
# ndarray对象的内容可以通过索引或切片来访问和修改
# ndarray 数组可以基于 0 - n 的下标进行索引，切片对象可以通过内置的 slice 函数，
# 并设置 start, stop 及 step 参数进行，从原数组中切割出一个新数组。

import numpy as np

a10 = np.arange(10)
s11 = slice(2, 7, 2)
print(type(s11)) # <class 'slice'>
print("a10[s11]=", a10[s11])

a15 = a10[2:7:2] # 同上
print('a15=', a15)

print(a10[2]) # 2
print(a10[2:]) # [2 3 4 5 6 7 8 9]
print(a10[2:7]) # [2 3 4 5 6]

print('end.1')

# 多维数组同样适用上述索引提取方法

a25 = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print('a25=', a25)

# 从某个索引处开始切割
print('a25[1:]=', a25[1:])

# 切片还可以包括省略号 …
print(a25[..., 1])
print(a25[..., 1:])
print(a25[1, ...])
print(a25[1:, ...])

# 在多维数组的切片中，使用 , 区分维数。
print(a25[0:1, 1:3])

# 在多维数组中，非连续索引切片
# 切片向量既可以为array,也可以为list类型

print('end.2')

a46 = np.arange(0, 25)
print('a46:')
print(type(a46)) # <class 'numpy.ndarray'>
print(a46.shape) # (25,)
print(a46)
print()

# 设置 shape 属性
a46.shape = (5, 5)
print(type(a46)) # (5, 5)
print(a46)
print(a46.shape)

# 索引取的是 n 维数组中对应下标的对象，一个下标的索引，表示取最底层维度第几个元素
# 切片是取原来 ndarray 的所有维度某个部分相交的的那些元素构成新的 ndarray，切片不会改变维度

a62 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print('a62:')
print(a62[1], '\n', a62[1, 1])
print(a62[1].ndim, '\n', a62[1, 1].ndim)

print('end.3')
